package pe.bf.extranet.dao.impl;

import java.math.BigInteger;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import pe.bf.base.dao.impl.BaseDAOImpl;
import pe.bf.domain.bean.Usuario;
import pe.bf.domain.constantes.Constantes;
import pe.bf.domain.exceptions.DomainException;
import pe.bf.extranet.dao.UsuarioDAO;

/**
 * 
 * @author rfigueroa
 * 
 */
public class UsuarioDAOImpl extends BaseDAOImpl implements UsuarioDAO {

	private static final String USP_CREAR_USUARIO = "{call PKG_USUARIO.USP_CREAR_USUARIO(?,?,?,?,?,?,?)}";
	private static final String USP_ACTUALIZAR_USUARIO = "{call PKG_USUARIO.USP_CREAR_USUARIO(?,?,?,?,?,?,?)}";
	private static final String USP_ELIMINAR_USUARIO = "{call PKG_USUARIO.USP_CREAR_USUARIO(?,?,?,?,?,?,?)}";
	private static final String USP_LISTAR_USUARIO = "{call PKG_USUARIO.USP_CREAR_USUARIO(?,?,?,?,?,?,?)}";

	/**
	 * 
	 * @param dataSource
	 */
	public UsuarioDAOImpl(DataSource dataSource) {
		super(dataSource);
	}

	/**
	 * @param usuario
	 * 
	 *            Este metodo crea usuarios
	 */
	@Override
	public void crearUsuario(Usuario usuario) throws DomainException {
		try {
			ivokeStoreProcedure(USP_CREAR_USUARIO, usuario.getEmpresa()
					.getIdEmpresa());
		} catch (DomainException e) {
			throw new DomainException(e);
		}
	}

	/**
	 * Este metodo actualiza usuarios
	 * 
	 * @param usuario
	 */
	@Override
	public void actualizarUsuario(Usuario usuario) throws DomainException {
		try {
			ivokeStoreProcedure(USP_ACTUALIZAR_USUARIO, usuario.getEmpresa()
					.getIdEmpresa());
		} catch (DomainException e) {
			throw new DomainException(e);
		}
	}

	/**
	 * Este metodo actualiza usuarios
	 * 
	 * @param usuario
	 */
	@Override
	public void actualizarUsuario(List<Usuario> usuario) throws DomainException {
		for (Usuario usu : usuario) {
			actualizarUsuario(usu);
		}
	}

	/**
	 * Este metodo actualiza usuarios
	 * 
	 * @param id
	 */
	@Override
	public void elimiarUsuario(BigInteger id) throws DomainException {
		try {
			ivokeStoreProcedure(USP_ELIMINAR_USUARIO, id);
		} catch (DomainException e) {
			throw new DomainException(e);
		}
	}

	/**
	 * Lista los usuarios por empresa
	 * 
	 * @param idEmpresa
	 */
	@Override
	public List<Usuario> listarUsuarios(BigInteger idEmpresa)
			throws DomainException {

		List<Usuario> usuarioList = null;
		try {
			ResultSet resultSet = ivokeStoreProcedure(USP_LISTAR_USUARIO,
					Constantes.CR_LST_USUARIOS, idEmpresa);
			usuarioList = new ArrayList<Usuario>();
			while (resultSet.next()) {
				Usuario usuario = new Usuario();
			}
		} catch (SQLException e) {
			throw new DomainException(e);
		}

		return usuarioList;
	}

}
